package com.ideaaedi.springcloud.jd.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ideaaedi.springcloud.jd.commonds.entity.PageInfo;
import com.ideaaedi.springcloud.jd.commonds.entity.user.po.SysDeptPO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDeptAddReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDeptListReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.req.SysDeptUpdateReqVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.resp.SysDeptDetailRespVO;
import com.ideaaedi.springcloud.jd.commonds.entity.user.vo.resp.SysDeptListRespVO;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.Nullable;

import java.util.Collection;
import java.util.Map;

/**
 * <p>
 * 组织架构表（部门表） 服务类
 * </p>
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 2021.0.1.A
 */
public interface SysDeptService extends IService<SysDeptPO> {
    
    /**
     * 列表
     *
     * @param req 参数
     *
     * @return 部门集合
     */
    PageInfo<SysDeptListRespVO> list(SysDeptListReqVO req);
    
    /**
     * 详情
     *
     * @param deptId 部门id
     *
     * @return 部门详情
     */
    SysDeptDetailRespVO detail(Integer deptId);
    
    /**
     * 更新
     *
     * @param req 参数
     *
     * @return 修改后的部门详情
     */
    SysDeptDetailRespVO update(SysDeptUpdateReqVO req);
    
    /**
     * 新增
     *
     * @param req 参数
     *
     * @return 新增的部门详情
     */
    SysDeptDetailRespVO add(SysDeptAddReqVO req);
    
    /**
     * 删除
     *
     * @param deptId 部门id
     *
     * @return 删除了的部门详情
     */
    SysDeptDetailRespVO delete(Integer deptId);
    
    /**
     * 构建部门名称path
     *
     * @param deptIdPathList 部门id路径集合
     *
     * @return  key-部门idPath；value-部门名称path
     */
    @NotNull
    Map<String, String> mappingDeptNamePath(@Nullable Collection<String> deptIdPathList);
    
    /**
     * 全局查询部门
     *
     * @param path 部门路径
     *
     * @return 部门
     */
    @Nullable
    SysDeptPO getByPath(@Nullable String path);
}
